package com.cskaoyan.javase.oop2._1extends._6restriction;
/**
 * 继承的限制
 *   思考1: 父类中的私有成员能够继承吗?
 *   是可以继承的,但是没有访问权限,所以子类对象无法直接访问父类中的私有成员.
 *   可以通过一个有权限的方法间接访问.
 *
 *   思考2: 父类中的静态成员能够继承吗?
 *   继承一般不考虑静态成员,从代码现象来说,可以通过子类类名去访问父类的静态成员
 *   但这不是继承,而是父子类同时共用了父类的一个静态成员
 *   思考3:能不能继承父类的构造器呢？
 * 首先构造器不能算成员，况且构造方法也不是普通方法，继承过来干嘛呢？构造器是不能被继承的。
 *
 *
 * 何时使用继承?
 * 不要盲目的去使用继承，尤其不要单纯为了复用代码，而使用继承。使用继承应该严格考虑两个类是否具有"is-a"关系！
 * 教师类继承人类，学生类继承人类是可以理解的，也是符合继承的思想的（is-a）。但是教师类中有姓名、年龄属性，学生类也需要这些成员，能单纯为了复用成员，让学生类继承教师类吗？显然不行！
 * 在实际开发中，在开发前的会议讨论，需求策划上，一定要认真分析程序中类的关系，避免出现错误的继承。
 *
 *
 * @since 11:40
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        // 'test()' has private access in 'com.cskaoyan.javase.oop2._1extends._6restriction.Father'
        // s.test();
        s.invokeTest();
        // s.num
        System.out.println(s.getNum());



        Father f = new Father();
        Son s2 = new Son();

        Son.staticNum = 1000;
        System.out.println(Father.staticNum);
    }
}
class Father{
    static int staticNum = 200;
    private int num = 100;
    int a;

    public int getNum() {
        return num;
    }

    private void test(){
        System.out.println("father");
    }

    public void invokeTest(){
        test();
    }
}
class Son extends Father{

}